/**
 * @description: 节流函数
 * @param {Function} fn 传入要节流的函数
 * @param {Number} interval 间隔时间
 * @return {*}
 */
export const throttle = function (fn, interval) {
	var enterTime = 0; //触发的时间
	var gapTime = interval || 300; //间隔时间，如果interval不传，则默认300ms
	return function () {
	  var context = this;
	  var backTime = new Date(); //第一次函数return即触发的时间
	  if (backTime - enterTime > gapTime) {
		fn.call(context, arguments);
		enterTime = backTime; //赋值给第一次触发的时间，这样就保存了第二次触发的时间
	  }
	};
  };
  /**
   * @description: 防抖函数
   * @param {Function} fn 传入要防抖的函数
   * @param {Number} interval 间隔时间
   * @return {*}
   */
  export const debounce = function (fn, interval) {
	var timer;
	var gapTime = interval || 1000; //间隔时间，如果interval不传，则默认1000ms
	return function () {
	  clearTimeout(timer);
	  var context = this;
	  var args = arguments; //保存此处的arguments，因为setTimeout是全局的，arguments不是防抖函数需要的。
	  timer = setTimeout(function () {
		fn.call(context, args);
	  }, gapTime);
	};
  };

  /**
 * @description: 深拷贝函数
 * @param {Object | Array} oldObj 传入要拷贝的对象
 * @return {Object | Array} 返回新的对象
 */
export const deepClone = function (oldObj) {
	//1. {} [] 搞一个容器
	let container;
	let type = getType(oldObj);
	if (type === "Array") {
	  container = [];
	}
	if (type === "Object") {
	  container = {};
	}
	//对象中的每一个属性
	for (let i in oldObj) {
	  let iType = getType(oldObj[i]);
	  if (iType === "Array" || iType === "Object") {
		//是数组和对象   递归
		container[i] = deepClone(oldObj[i]);
	  } else {
		//普通数据类型和函数
		container[i] = oldObj[i];
	  }
	}
	//返回值
	return container;
  };

  //封装数据类型
function getType(obj) {
	if (typeof obj == "object") {
	  //不是数组就是对象
	  if (obj instanceof Array) {
		//数组
		return "Array";
	  } else {
		//对象
		return "Object";
	  }
	} else {
	  //普通数据类型：Number String Boolean 函数
	  return false;
	}
  }

  /**
 * 获取手机相关系统信息
 * 
 */
export const getSystemInfo= async function () {
    return new Promise((resolve, reject) => {
        my.getSystemInfo({
            success: info => {
                // 手机机型
                info.isX = (info.screenWidth / info.screenHeight < 0.51) ? true : false;        
                // 手机系统
                info.isIos = (info.platform.toLowerCase() == 'ios') ? true : false;          
                resolve(info);
            },
            fail: (err) => {
                reject(err);
            }
        });
    });
}